#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>

// 处理信号
void handlerSig(int sig)
{
    std::cout << "获得了一个信号：" << sig << std::endl;
    exit(13); // 设置退出码为13
}
int main()
{
    // 对信号捕捉(除SIGKILL和SIGSTOP)
    for(int i = 1; i < 32; i++)
        signal(i, handlerSig);
    // // 每隔一秒向自己发送一个信号
    // for (int i = 1; i < 32; i++)
    // {
    //     sleep(1);
    //     raise(i);
    // }
    
    int cnt = 0;
    while(true)
    {
        std::cout << "hello world, " << cnt++ << " , pid: " << getpid() << std::endl;
        //abort();
        // int a = 10;
        // a /= 0; // 除0错误
        int *p = nullptr;
        *p = 100; // 野指针
        sleep(3);
    }
    return 0;
}

// void handler(int signumber)
// {
//     std::cout << "我是: " << getpid() << ", 我获得了⼀个信号: " << signumber
//               << std::endl;
// }
// int main()
// {
//     std::cout << "我是进程: " << getpid() << std::endl;
//     signal(SIGINT /*2*/, SIG_IGN); // 设置忽略信号的宏
//     while (true)
//     {
//         std::cout << "I am a process, I am waiting signal!" << std::endl;
//         sleep(1);
//     }
// }


// void handler(int signumber)
// {
//     std::cout << "我是: " << getpid() << ", 我获得了⼀个信号: " << signumber
//               << std::endl;
// }
// int main()
// {
//     std::cout << "我是进程: " << getpid() << std::endl;
//     signal(SIGINT /*2*/, SIG_DFL);
//     while (true)
//     {
//         std::cout << "I am a process, I am waiting signal!" << std::endl;
//         sleep(1);
//     }
// }


// void handler(int signumber)
// {
//     std::cout << "我是: " << getpid() << ", 我获得了⼀个信号: " << signumber << std::endl;
// }
// int main()
// {
//     std::cout << "我是进程: " << getpid() << std::endl;
//     //signal(SIGQUIT /*3*/, handler);
//     while (true)
//     {
//         std::cout << "I am a process, I am waiting signal!" << std::endl;
//         sleep(1);
//     }
// }


// void handler(int signumber)
// {
//     std::cout << "我是: " << getpid() << ", 我获得了⼀个信号: " << signumber << std::endl;
// }
// int main()
// {
//     std::cout << "我是进程: " << getpid() << std::endl;
//     //signal(SIGTSTP /*20*/, handler);
//     while (true)
//     {
//         std::cout << "I am a process, I am waiting signal!" << std::endl;
//         sleep(1);
//     }
// }